package run.config;

import com.luci.security.result.DefaultAuthResult;
import com.luci.security.result.JwtUser;
import com.luci.security.result.LoginException;
import com.luci.security.support.AbstractLoginAdapter;
import com.luci.security.support.DefaultLoginBo;
import com.luci.security.support.ILoginBo;
import java.util.Arrays;

public class CustomLogin extends AbstractLoginAdapter<CustomLoginBo> {//泛型要指定为登陆类
    //指定登陆参数类的class 因为后面序列化需要用，回头会想想优化可以去掉此方法
    @Override
    public Class<CustomLoginBo> getLoginBoClass() {
        return CustomLoginBo.class;
    }
    /**
     * 登陆逻辑
     * @param loginBo 定义的登陆类
     * @return JwtUser 登陆用户的信息
     * @throws LoginException 登陆异常，请抛出此类，此类的
     */
    @Override
    public JwtUser login(CustomLoginBo loginBo) throws LoginException {
        if (loginBo.getUsername().equals("admin")) {
            //jwtUser类为指定的登陆用户信息类
            JwtUser user = new JwtUser();
            //请将用户信息放入detail 就像将用户信息放到servlet的session中
            user.setDetails(loginBo);
            //设置用户所属的角色标识集合，一般为角色id，如果你的系统有角色，有部门，可以这样 role_角色id， dept_部门id
            user.setRoles(Arrays.asList(new String[]{"roleId"}));
            //登陆成功
            return user;
        } else {
            //验证的地方，使用LoginException异常类，参数DefaultAuthResult 可以替换为你的项目定义的统一的接口返回值类
            throw new LoginException(new DefaultAuthResult(300, "用户名不存在"));
        }
    }
}
